#!/bin/bash

# 加载环境变量
if [ -f ".env" ]; then
  source .env
else
  echo "Error: .env file not found"
  exit 1
fi

# 定义默认镜像前缀
DEFAULT_PREFIX=""

# 使用环境变量中的镜像代理（如果设置）
REGISTRY_MIRROR=${DOCKER_REGISTRY_MIRROR:-$DEFAULT_PREFIX}

# 获取版本号环境变量
NODE_VERSION=${NODE_VERSION:-"18.19.1"}
GO_VERSION=${GO_VERSION:-"1.22.0"}
GO_ZERO_VERSION=${GO_ZERO_VERSION:-"1.5.6"}
TYPESCRIPT_VERSION=${TYPESCRIPT_VERSION:-"5.3.3"}
PRETTIER_VERSION=${PRETTIER_VERSION:-"3.1.1"}
ESLINT_VERSION=${ESLINT_VERSION:-"8.56.0"}

# 替换docker-compose.yml中的镜像地址
replace_image_prefix() {
  local file=$1
  
  if [ -z "$REGISTRY_MIRROR" ]; then
    # 如果REGISTRY_MIRROR为空，还原为默认镜像地址
    sed -i.bak 's|https://hub.skillixx.com/||g' $file
  else
    # 添加镜像代理前缀
    sed -i.bak "s|image: |image: ${REGISTRY_MIRROR}|g" $file
    # 避免重复替换已经有前缀的镜像
    sed -i.bak "s|image: ${REGISTRY_MIRROR}${REGISTRY_MIRROR}|image: ${REGISTRY_MIRROR}|g" $file
  fi
  
  # 清理备份文件
  rm -f ${file}.bak
}

# 替换Dockerfile中的基础镜像
replace_dockerfile_base() {
  local file=$1
  local image=$2
  
  if [ -z "$REGISTRY_MIRROR" ]; then
    # 如果REGISTRY_MIRROR为空，还原为默认镜像地址
    sed -i.bak "s|FROM ${REGISTRY_MIRROR}${image}|FROM ${image}|g" $file
    sed -i.bak "s|FROM https://hub.skillixx.com/${image}|FROM ${image}|g" $file
  else
    # 添加镜像代理前缀
    sed -i.bak "s|FROM [^[:space:]]*/\{0,1\}${image}|FROM ${REGISTRY_MIRROR}${image}|g" $file
    sed -i.bak "s|FROM ${image}|FROM ${REGISTRY_MIRROR}${image}|g" $file
  fi
  
  # 清理备份文件
  rm -f ${file}.bak
}

# 替换环境变量占位符为实际版本号
replace_env_vars() {
  local file=$1
  
  # 替换NODE_VERSION
  sed -i.bak "s|\${NODE_VERSION}|${NODE_VERSION}|g" $file
  # 替换GO_VERSION
  sed -i.bak "s|\${GO_VERSION}|${GO_VERSION}|g" $file
  # 替换GO_ZERO_VERSION
  sed -i.bak "s|\${GO_ZERO_VERSION}|${GO_ZERO_VERSION}|g" $file
  # 替换TYPESCRIPT_VERSION
  sed -i.bak "s|\${TYPESCRIPT_VERSION}|${TYPESCRIPT_VERSION}|g" $file
  # 替换PRETTIER_VERSION
  sed -i.bak "s|\${PRETTIER_VERSION}|${PRETTIER_VERSION}|g" $file
  # 替换ESLINT_VERSION
  sed -i.bak "s|\${ESLINT_VERSION}|${ESLINT_VERSION}|g" $file
  
  # 清理备份文件
  rm -f ${file}.bak
}

echo "使用镜像源: ${REGISTRY_MIRROR:-'默认Docker Hub'}"
echo "使用Node.js版本: ${NODE_VERSION}"
echo "使用Go版本: ${GO_VERSION}"
echo "使用Go-Zero版本: ${GO_ZERO_VERSION}"

# 替换docker-compose.yml中的镜像地址
echo "正在更新docker-compose.yml..."
replace_image_prefix docker-compose.yml

# 更新前端Dockerfile
echo "正在更新前端Dockerfile..."
replace_env_vars frontend/Dockerfile.dev
replace_dockerfile_base frontend/Dockerfile.dev "node:${NODE_VERSION}-alpine"
# 更新前端生产环境Dockerfile
if [ -f "frontend/Dockerfile" ]; then
  echo "正在更新前端生产环境Dockerfile..."
  replace_env_vars frontend/Dockerfile
  replace_dockerfile_base frontend/Dockerfile "node:${NODE_VERSION}-alpine"
fi

# 更新后端Dockerfile
echo "正在更新后端Dockerfile..."
replace_env_vars backend/Dockerfile.dev
replace_dockerfile_base backend/Dockerfile.dev "golang:${GO_VERSION}-alpine"
# 更新后端生产环境Dockerfile
if [ -f "backend/Dockerfile" ]; then
  echo "正在更新后端生产环境Dockerfile..."
  replace_env_vars backend/Dockerfile
  replace_dockerfile_base backend/Dockerfile "golang:${GO_VERSION}-alpine"
fi

# 更新沙箱Dockerfile
echo "正在更新沙箱Dockerfile..."
replace_env_vars sandbox/Dockerfile.dev
replace_dockerfile_base sandbox/Dockerfile.dev "node:${NODE_VERSION}-alpine"
# 更新沙箱生产环境Dockerfile
if [ -f "sandbox/Dockerfile" ]; then
  echo "正在更新沙箱生产环境Dockerfile..."
  replace_env_vars sandbox/Dockerfile
  replace_dockerfile_base sandbox/Dockerfile "node:${NODE_VERSION}-alpine"
fi

echo "镜像地址和版本已更新完成"
echo "你可以使用以下命令启动服务："
echo "docker-compose up -d" 